import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:queue_template/queue_template.dart';
import 'package:fluttertoast/fluttertoast.dart';
import './utils/Api.dart';
import './utils/Constant.dart';
import './utils/DioUtils.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // 标题设置
  String mainTitle = '排队管理';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false, // 关闭'DEBUG'字样
      title: mainTitle,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: mainTitle),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 是否有任务  没有是否表示有任务接口  自己定义一个变量  noTaskStatus TRUE表示有任务展示有任务页面  false表示无任务展示无任务页面
  bool _noTaskStatus = false;
  Map _Map = {};

  @override
  void initState() {
    super.initState();
    this._getData();
  }

// 获取排队信息
  _getData() async {
    DioUtils(Api.queryQueueInfo, Method.post, {'id': 1}).then((data) {
      data = data['result'];
      setState(() {
        this._Map = data;
      });
    }).catchError((error) {
      if (error) {
        print(error.toString());
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // backgroundColor: Colors.green,
      appBar: AppBar(
        title: Text(
          widget.title,
          style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w500),
        ),
        flexibleSpace: this._noTaskStatus
            ? Container()
            : InitLinearGradient(ConstrainedBox(
                constraints: BoxConstraints.expand(),
              )),
        elevation: 0,
        centerTitle: true,
        backgroundColor: Colors.transparent,
      ),
      // 引入外层样式  填充内容 先判断是否有任务 分别展示有任务和无任务页面
      body: this._noTaskStatus ? ReturnNoTask() : this.checkData(),
    );
  }

// 校验数据是否返回  有数据 return 页面 没数据展示无任务
  Widget checkData() {
    if (this._Map.isEmpty) {
      return ReturnNoTask();
    } else {
      return InitLinearGradient(OutSetBodyStyle(Column(
        children: <Widget>[
          TopContent(this._Map), // body上部分
          BottomContent(this._Map), // body下部分
        ],
      )));
    }
  }
}

// 没有任务页面
class ReturnNoTask extends StatefulWidget {
  @override
  _ReturnNoTaskState createState() => _ReturnNoTaskState();
}

class _ReturnNoTaskState extends State<ReturnNoTask> {
  @override
  Widget build(BuildContext context) {
    return NoTask('无运输任务', '暂未找到您的运输任务哦');
  }
}

//内容上部分
class TopContent extends StatefulWidget {
  final Map queryInfo;
  TopContent(this.queryInfo);
  @override
  _TopContentState createState() => _TopContentState();
}

class _TopContentState extends State<TopContent> {
  @override
  Widget build(BuildContext context) {
    return SetTopStyle(// 调用展示文案提示和地址两个内容
        TopInfo('请在附近安全区域停车，等候进厂', widget.queryInfo['loadGoodsAddr'],
            widget.queryInfo['unloadGoodsAddr'], (e) {
      // 用户点击回调
      Fluttertoast.showToast(msg: e);
    }));
  }
}

// 内容下部分
class BottomContent extends StatefulWidget {
  final Map queryInfo;
  BottomContent(this.queryInfo);

  @override
  _BottomContentState createState() => _BottomContentState();
}

class _BottomContentState extends State<BottomContent> {
  String _btnHtml = '';
  List _items = [];
  void initState() {
    super.initState();
    setState(() {
      this._btnHtml = widget.queryInfo['queueStatus'] == 0 ||
              widget.queryInfo['queueStatus'] == 4
          ? '排队取号'
          : '取消排队';
      // queueStatus 根据状态判断是否显示 状态3表示进场中 按钮置为蓝色
      this._items = [
        {
          'title': '排队号码',
          'text': widget.queryInfo['allocateNum'].toString(),
          'queueStatus': widget.queryInfo['queueStatus']
        },
        {
          'title': '前面等待',
          'text': widget.queryInfo['waitingNumber'].toString(),
          'queueStatus': widget.queryInfo['queueStatus'],
        },
        {
          'title': '车牌号码',
          'text': widget.queryInfo['vno'],
          'queueStatus': widget.queryInfo['queueStatus'],
        },
        {
          'title': '排队状态',
          'text': queueStatus[widget.queryInfo['queueStatus']],
          'queueStatus': widget.queryInfo['queueStatus'],
          'sign': '1'
        },
      ];
    });
  }

// 取消排队
  _cancelQueue() async {
    DioUtils(Api.cancelQueue, Method.post, {
      'id': widget.queryInfo['id'],
      'vno': widget.queryInfo['vno']
    }).then((data) {
      Fluttertoast.showToast(msg: '取消成功');
    }).catchError((error) {
      if (error) {
        print(error.toString());
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return SetBottomStyle(Column(
      children: [
        // 排队信息
        ReturnLineUp(items: this._items),
        ReturnEwm(),
        //根据状态是否显示按钮  已经进场的不需要展示按钮
        widget.queryInfo['queueStatus'] == 3
            ? Text('')
            : ReturnButton(this._btnHtml, (e) {
                if (widget.queryInfo['queueStatus'] == 4) {
                  Fluttertoast.showToast(msg: '状态处于已经取消，调排队取号按钮，暂无这个接口');
                } else {
                  return showDialog(
                    context: context,
                    barrierDismissible: false,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title: Text('提示'),
                        content: Text('是否确认取消排队?'),
                        actions: <Widget>[
                          FlatButton(
                            child: Text('取消'),
                            onPressed: () {
                              Navigator.pop(context, 'cancel');
                            },
                          ),
                          FlatButton(
                            child: Text('确认'),
                            onPressed: () {
                              // 用户按钮点击回调 取消排队
                              this._cancelQueue();
                              Navigator.pop(context, 'cancel');
                            },
                          ),
                        ],
                      );
                    },
                  );
                }
              }),
      ],
    ));
  }
}

// 二维码
class ReturnEwm extends StatefulWidget {
  @override
  _ReturnEwmState createState() => _ReturnEwmState();
}

class _ReturnEwmState extends State<ReturnEwm> {
  @override
  Widget build(BuildContext context) {
    return SetErm(QrImage(
      data: '二维码要显示的数据',
      size: 150.0,
    ));
  }
}
